﻿using System;
//4.14.5 数组
//2.固定大小的缓冲区

namespace _146_不安全代码_数组_固定大小的缓冲区
{
    //我们也可以使用fixed关键字在一个结构体代码块中分配内存：
    unsafe struct UnsafeUnicodeString
    {
        public short Length;
        public fixed byte Buffer[30];
    }
    unsafe class UnsafeClass
    {
        UnsafeUnicodeString uus;
        public UnsafeClass(string s)
        {
            uus.Length = (short)s.Length;
            fixed (byte* p = uus.Buffer)
                for (int i = 0; i < s.Length; i++)
                    p[i] = (byte)s[i];
        }
    }
    class Test
    {
        static void Main(string[] args)
        {
            new UnsafeClass("Christian Troy");
        }
    }
}
//上例是UnsafeClass的实例，使用fixed关键字将对象锁定到包含该缓冲区的堆上。
//因此，fixed表示两个不同的方面：大小固定和位置固定。这两者通常一起使用，即固定大小的缓冲区必须固定的位置上使用。